home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1998 June / SGI Freeware 1998 June.iso / dist / fw_bind.idb / usr / freeware / lib / bind / include / isc / eventlib.h.z / eventlib.h
C/C++ Source or Header  |  1998-05-26  |  7KB  |  192 lines

  1. /*
  2.  * Copyright (c) 1995, 1996, 1997, 1998 by Internet Software Consortium
  3.  *
  4.  * Permission to use, copy, modify, and distribute this software for any
  5.  * purpose with or without fee is hereby granted, provided that the above
  6.  * copyright notice and this permission notice appear in all copies.
  7.  *
  8.  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
  9.  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
  10.  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
  11.  * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12.  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  13.  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  14.  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  15.  * SOFTWARE.
  16.  */
  17.  
  18. /* eventlib.h - exported interfaces for eventlib
  19.  * vix 09sep95 [initial]
  20.  *
  21.  * $Id: eventlib.h,v 1.19 1998/02/06 01:55:51 halley Exp $
  22.  */
  23.  
  24. #ifndef _EVENTLIB_H
  25. #define _EVENTLIB_H
  26.  
  27. #include <sys/types.h>
  28. #include <sys/uio.h>
  29. #include <sys/time.h>
  30. #include <stdio.h>
  31.  
  32. #ifndef __P
  33. # define __EVENTLIB_P_DEFINED
  34. # ifdef __STDC__
  35. #  define __P(x) x
  36. # else
  37. #  define __P(x) ()
  38. # endif
  39. #endif
  40.  
  41. /* In the absence of branded types... */
  42. typedef struct { void *opaque; } evConnID;
  43. typedef struct { void *opaque; } evFileID;
  44. typedef struct { void *opaque; } evStreamID;
  45. typedef struct { void *opaque; } evTimerID;
  46. typedef struct { void *opaque; } evWaitID;
  47. typedef struct { void *opaque; } evContext;
  48. typedef struct { void *opaque; } evEvent;
  49.  
  50. typedef void (*evConnFunc)__P((evContext ctx, void *uap, int fd,
  51.                    const void *la, int lalen,
  52.                    const void *ra, int ralen));
  53. typedef void (*evFileFunc)__P((evContext ctx, void *uap, int fd, int evmask));
  54. typedef    void (*evStreamFunc)__P((evContext ctx, void *uap, int fd, int bytes));
  55. typedef void (*evTimerFunc)__P((evContext ctx, void *uap,
  56.                 struct timespec due, struct timespec inter));
  57. typedef    void (*evWaitFunc)__P((evContext ctx, void *uap, const void *tag));
  58.  
  59. typedef    struct { unsigned char mask[256/8]; } evByteMask;
  60. #define    EV_BYTEMASK_BYTE(b) ((b) / 8)
  61. #define    EV_BYTEMASK_MASK(b) (1 << ((b) % 8))
  62. #define    EV_BYTEMASK_SET(bm, b) \
  63.     ((bm).mask[EV_BYTEMASK_BYTE(b)] |= EV_BYTEMASK_MASK(b))
  64. #define    EV_BYTEMASK_CLR(bm, b) \
  65.     ((bm).mask[EV_BYTEMASK_BYTE(b)] &= ~EV_BYTEMASK_MASK(b))
  66. #define    EV_BYTEMASK_TST(bm, b) \
  67.     ((bm).mask[EV_BYTEMASK_BYTE(b)] & EV_BYTEMASK_MASK(b))
  68.  
  69. #define    EV_POLL        1
  70. #define    EV_WAIT        2
  71. #define    EV_NULL        4
  72.  
  73. #define    EV_READ        1
  74. #define    EV_WRITE    2
  75. #define    EV_EXCEPT    4
  76.  
  77. /* eventlib.c */
  78. #define evCreate    __evCreate
  79. #define evSetDebug    __evSetDebug
  80. #define evDestroy    __evDestroy
  81. #define evGetNext    __evGetNext
  82. #define evDispatch    __evDispatch
  83. #define evDrop        __evDrop
  84. #define evMainLoop    __evMainLoop
  85.  
  86. int  evCreate __P((evContext *ctx));
  87. void evSetDebug __P((evContext ctx, int lev, FILE *out));
  88. int  evDestroy __P((evContext ctx));
  89. int  evGetNext __P((evContext ctx, evEvent *ev, int options));
  90. int  evDispatch __P((evContext ctx, evEvent ev));
  91. void evDrop __P((evContext ctx, evEvent ev));
  92. int  evMainLoop __P((evContext ctx));
  93.  
  94. /* ev_connects.c */
  95. #define evListen    __evListen
  96. #define evConnect    __evConnect
  97. #define evCancelConn    __evCancelConn
  98. #define evHold        __evHold
  99. #define evUnhold    __evUnhold
  100. #define evTryAccept    __evTryAccept
  101.  
  102. int evListen __P((evContext ctx, int fd, int maxconn,
  103.           evConnFunc func, void *uap, evConnID *id));
  104. int evConnect __P((evContext ctx, int fd, void *ra, int ralen,
  105.            evConnFunc func, void *uap, evConnID *id));
  106. int evCancelConn __P((evContext ctx, evConnID id));
  107. int evHold __P((evContext, evConnID));
  108. int evUnhold __P((evContext, evConnID));
  109. int evTryAccept __P((evContext, evConnID, int *));
  110.  
  111. /* ev_files.c */
  112. #define evSelectFD    __evSelectFD
  113. #define evDeselectFD    __evDeselectFD
  114.  
  115. int evSelectFD __P((evContext ctx, int fd, int eventmask,
  116.             evFileFunc func, void *uap, evFileID *id));
  117. int evDeselectFD __P((evContext ctx, evFileID id));
  118.  
  119. /* ev_streams.c */
  120. #define evConsIovec    __evConsIovec
  121. #define evWrite        __evWrite
  122. #define evRead        __evRead
  123. #define evTimeRW    __evTimeRW
  124. #define evUntimeRW    __evUntimeRW
  125. #define    evCancelRW    __evCancelRW
  126.  
  127. struct iovec evConsIovec __P((void *buf, size_t cnt));
  128. int evWrite __P((evContext ctx, int fd, const struct iovec *iov, int cnt,
  129.          evStreamFunc func, void *uap, evStreamID *id));
  130. int evRead __P((evContext ctx, int fd, const struct iovec *iov, int cnt,
  131.         evStreamFunc func, void *uap, evStreamID *id));
  132. int evTimeRW __P((evContext ctx, evStreamID id, evTimerID timer));
  133. int evUntimeRW __P((evContext ctx, evStreamID id));
  134. int evCancelRW __P((evContext ctx, evStreamID id));
  135.  
  136. /* ev_timers.c */
  137. #define evConsTime    __evConsTime
  138. #define evAddTime    __evAddTime
  139. #define evSubTime    __evSubTime
  140. #define evCmpTime    __evCmpTime
  141. #define    evTimeSpec    __evTimeSpec
  142. #define    evTimeVal    __evTimeVal
  143.  
  144. #define evNowTime        __evNowTime
  145. #define evLastEventTime        __evLastEventTime
  146. #define evSetTimer        __evSetTimer
  147. #define evClearTimer        __evClearTimer
  148. #define evResetTimer        __evResetTimer
  149. #define evSetIdleTimer        __evSetIdleTimer
  150. #define evClearIdleTimer    __evClearIdleTimer
  151. #define evResetIdleTimer    __evResetIdleTimer
  152. #define evTouchIdleTimer    __evTouchIdleTimer
  153.  
  154. struct timespec evConsTime __P((time_t sec, long nsec));
  155. struct timespec evAddTime __P((struct timespec add1, struct timespec add2));
  156. struct timespec evSubTime __P((struct timespec minu, struct timespec subtra));
  157. struct timespec evNowTime __P((void));
  158. struct timespec evLastEventTime __P((evContext));
  159. struct timespec evTimeSpec __P((struct timeval));
  160. struct timeval evTimeVal __P((struct timespec));
  161. int evCmpTime __P((struct timespec a, struct timespec b));
  162. int evSetTimer __P((evContext ctx, evTimerFunc func, void *uap,
  163.             struct timespec due, struct timespec inter,
  164.             evTimerID *id));
  165. int evClearTimer __P((evContext ctx, evTimerID id));
  166. int evResetTimer __P((evContext, evTimerID, evTimerFunc, void *,
  167.               struct timespec, struct timespec));
  168. int evSetIdleTimer __P((evContext, evTimerFunc, void *, struct timespec,
  169.             evTimerID *));
  170. int evClearIdleTimer __P((evContext, evTimerID));
  171. int evResetIdleTimer __P((evContext, evTimerID, evTimerFunc, void *,
  172.               struct timespec));
  173. int evTouchIdleTimer __P((evContext, evTimerID));
  174.  
  175. /* ev_waits.c */
  176. #define evWaitFor    __evWaitFor
  177. #define evDo        __evDo
  178. #define evUnwait    __evUnwait
  179. #define evDefer        __evDefer
  180.  
  181. int evWaitFor __P((evContext ctx, const void *tag, evWaitFunc func, void *uap,
  182.            evWaitID *id));
  183. int evDo __P((evContext ctx, const void *tag));
  184. int evUnwait __P((evContext ctx, evWaitID id));
  185. int evDefer __P((evContext, evWaitFunc, void *));
  186.  
  187. #ifdef __EVENTLIB_P_DEFINED
  188. # undef __P
  189. #endif
  190.  
  191. #endif /*_EVENTLIB_H*/
  192.